Ăppige, kuidas kasutada Next.js Layoutide eeliseid, et luua tugevaid, skaleeritavaid ja globaalselt teadlikke rakendusi. Avastage jagatud UI komponentide parimad praktikad.
Next.js Layoutid: Jagatud UI komponentide mustrite valdamine globaalsete rakenduste jaoks
Next.js on saanud kaasaegse veebiarenduse nurgakiviks, mis on tuntud oma vĂ”ime poolest sujuvamaks muuta jĂ”udlusele orienteeritud ja kasutajasĂ”bralike rakenduste loomist. Selle vĂ”imekuse keskmes on UI komponentide efektiivne haldamine ja selle sĂŒdames peitub Next.js Layoutide jĂ”ud. See pĂ”hjalik juhend sukeldub sĂŒgavalt Next.js Layoutide vĂ”imendamise keerukustesse, et luua tugevaid, skaleeritavaid ja globaalselt teadlikke rakendusi. Uurime jagatud UI komponentide loomise parimaid praktikaid, mis edendavad koodi taaskasutatavust, hooldatavust ja sujuvat kasutajakogemust kasutajatele kogu maailmas.
Layoutide tÀhtsuse mÔistmine Next.js-is
Veebiarenduse valdkonnas, eriti selliste raamistikega nagu Next.js, on layoutid arhitektuuriline vundament, millele teie rakenduse kasutajaliides on ehitatud. Need on jĂ€rjepidevate, taaskasutatavate UI elementide plaan, mis kujundavad ĂŒldist kasutajakogemust. Layoutidele mĂ”tlemine hĂ€sti struktureeritud rakenduse disainis vĂ”imaldab arendajatel vĂ€ltida koodi dubleerimist ja lihtsustab hooldust. PĂ”himĂ”tteliselt pakuvad need raamistiku jĂ€rgmiseks:
- JĂ€rjepidev brĂ€nding: Ăhtse visuaalse identiteedi sĂ€ilitamine kĂ”igil lehtedel.
- Jagatud navigeerimine: NavigeerimismenĂŒĂŒde, jaluste ja muude pĂŒsivate UI elementide juurutamine ja haldamine, mis kuvatakse mitmel lehel.
- Koodi taaskasutatavus: Vajaduse vĂ€ltimine sama UI loogika korduvalt ĂŒmberkirjutamiseks.
- SEO optimeerimine: JÀrjepidevate meta siltide, pealkirjasiltide ja muude SEO elementide rakendamine kogu teie saidil, mis aitab parandada otsingumootori jÀrjestust.
- JÔudluse parandused: Next.js-i pakutavate funktsioonide, nagu serveripoolne renderdamine (SSR) ja staatilise saidi genereerimine (SSG), kasutamine optimaalsete komponendikonfiguratsioonidega.
Next.js Layoutide peamised kontseptsioonid ja eelised
1. Failid `_app.js` ja `_document.js`
Next.js-is mÀngivad kaks spetsiaalset faili paigutuste ja globaalsete konfiguratsioonide mÀÀratlemisel kriitilist rolli: `_app.js` ja `_document.js`. Nende eesmÀrgi mÔistmine on fundamentaalne.
_app.js
: See on kĂ”rgeima taseme komponent, mis ĂŒmbritseb kĂ”iki teisi lehti teie rakenduses. Tavaliselt kasutate seda faili jĂ€rgmisteks toiminguteks:- Globaalse CSS-i vĂ”i stiilitud komponentide lĂ€htestamine.
- Andmete edastamine teie komponentidele kontekstipakkujate abil.
- Rakenduse pakkimine pakkujatega nagu Redux vÔi Zustand olekuhalduse jaoks.
- Globaalse layouti mÀÀratlemine, mis kehtib kĂ”igile lehtedele, nĂ€iteks pĂŒsiv pĂ€is vĂ”i jalus.
_document.js
: See on tĂ€iustatud konfiguratsioonifail, kus teil on kontroll HTML-dokumendi serveripoolse renderdamise ĂŒle. See fail vĂ”imaldab teil muuta silte<html>
,<head>
ja<body>
. Seda kasutatakse peamiselt keerukamate SEO ja jÔudluse optimeerimiste jaoks. Tavaliselt kasutate `_document.js` jÀrgmisteks toiminguteks:- VÀliste fontide, skriptide ja stiililehtede kaasamine.
- HTML-dokumendi vaikekonstruktsiooni seadistamine.
- Serveripoolse renderdamise protsessi kohandamine.
2. Layoutide kasutamise eelised
Layoutide kasutamine pakub hulgaliselt eeliseid, eriti suurte ja keerukate veebirakenduste ehitamisel:
- Paranenud koodi organiseerimine: UI komponentide eraldamisega taaskasutatavateks mooduliteks parandate koodi loetavust ja hooldatavust.
- Lihtsustatud hooldus: Kui on vaja muudatusi, peate vÀrskendama ainult layout komponenti ja need muudatused kajastuvad kogu rakenduses.
- TÀiustatud jÔudlus: Layoutid saavad optimeerida sisu edastamist, mis toob kaasa kiirema lehe laadimise ja parema kasutajakogemuse.
- JĂ€rjepidev kasutajakogemus: JĂ€rjepidev layout tagab, et kasutajatel on tuttav kogemus, kui nad teie rakenduses navigeerivad.
- SEO eelised: JÀrjepidev HTML-struktuur ja meta sildid (mida sageli hallatakse layoutide sees) parandavad otsingumootori jÀrjestust ja nÀhtavust.
Jagatud UI komponentide mustrite juurutamine
1. PÔhilise Layout komponendi loomine
Loome lihtsa layout komponendi. See komponent sisaldab pÀist, peamist sisuala ja jalust. See on mÔeldud jagamiseks mitmel lehel.
// components/Layout.js
import Head from 'next/head';
function Layout({ children, title }) {
return (
<>
<Head>
<title>{title} | My App</title>
<meta name="description" content="My Next.js App" />
</Head>
<header>
<h1>My App Header</h1>
</header>
<main>{children}</main>
<footer>
<p>© {new Date().getFullYear()} My App. All rights reserved.</p>
</footer>
</>
);
}
export default Layout;
Selles nÀites saab `Layout` komponent rekvisiitidena `children` ja `title`. `children` esindab lehe sisu, mis renderdatakse layoutis, samas kui `title` mÀÀrab lehe pealkirjasildi SEO jaoks.
2. Layout komponendi kasutamine lehel
NĂŒĂŒd rakendame selle layouti ĂŒhele teie lehele (nt `pages/index.js`).
// pages/index.js
import Layout from '../components/Layout';
function HomePage() {
return (
<Layout title="Home">
<h2>Welcome to the Home Page</h2>
<p>This is the main content of the home page.</p>
</Layout>
);
}
export default HomePage;
Failis `pages/index.js` impordime `Layout` komponendi ja pakime lehe sisu selle sisse. Pakume ka lehepÔhist `title`. `children` rekvisiit komponendis `Layout` tÀidetakse sisuga, mis on vahemikus `<Layout>` siltides failis `index.js`.
3. TĂ€iustatud Layout funktsioonid
- DĂŒnaamiline andmete hankimine: Saate kasutada `getServerSideProps` vĂ”i `getStaticProps`, et hankida andmeid oma layout komponendis. See vĂ”imaldab teil sisestada andmeid pĂ€isesse vĂ”i navigeerimisse andmeallikast.
- Kontekstipakkujad: Kasutage React konteksti, et jagada olekut ja andmeid komponentide vahel, mis on layouti sisse pakitud. See on oluline teemade, kasutaja autentimise ja muude globaalsete rakenduse olekute haldamiseks.
- Tingimuslik renderdamine: Juurutage tingimuslik renderdamine oma layoutis, et kuvada erinevaid UI elemente sÔltuvalt kasutaja autentimisest, ekraani suurusest vÔi muudest teguritest.
- Stiilimine: Lisage CSS-in-JS (nt styled-components, Emotion), CSS moodulid vÔi tavaline CSS otse oma layout komponendis.
Globaalsed kaalutlused rahvusvaheliste rakenduste jaoks
Globaalsele publikule layoutide loomisel on oluline arvestada mitmete rahvusvahelistumise ja globaliseerumise (i18n/g11n) aspektidega. Need praktikad tagavad, et teie rakendus on ligipÀÀsetav ja kasutajasÔbralik erineva kultuuritaustaga inimestele.
1. Rahvusvahelistumine (i18n) ja lokaliseerimine (l10n)
- i18n (rahvusvahelistumine): Kujundage oma rakendus nii, et see oleks kohandatav erinevate keelte ja piirkondadega. See hÔlmab teksti abstraheerimist, kuupÀeva- ja numbrivormingute kÀsitlemist ning erinevate mÀrgistikute toetamist.
- l10n (lokaliseerimine): Kohandage oma rakendus konkreetsele lokaadile, sealhulgas keele tÔlkimine, valuutavorming, kuupÀeva/kellaaja vormingud ja kultuurilised eelistused.
2. i18n juurutamine Next.js Layoutides
i18n juurutamiseks Next.js-is saate kasutada erinevaid teeke, nÀiteks `next-i18next` vÔi sisseehitatud `next/router` marsruutimispÔhiste lahenduste jaoks.
Siin on lihtsustatud nÀide `next-i18next` abil, kasutades faili `_app.js`. See seadistab i18n rakenduse tasemel. Veenduge, et olete installinud vajalikud paketid, kasutades `npm install i18next react-i18next next-i18next`. See nÀide demonstreerib lihtsustatud integratsiooni ja vÔib vajada kohandusi vastavalt konkreetsetele nÔuetele.
// _app.js
import { appWithTranslation } from 'next-i18next';
import '../styles/global.css'; // Import your global styles
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />;
}
export default appWithTranslation(MyApp);
Selles failis `_app.js` pakub `appWithTranslation` rahvusvahelistumise konteksti rakendusele.
SeejÀrel kasutage oma layoutis `react-i18next` pakutavat hooki `useTranslation`:
// components/Layout.js
import { useTranslation } from 'react-i18next';
import Head from 'next/head';
function Layout({ children, title }) {
const { t } = useTranslation(); // Get the translate function
return (
<>
<Head>
<title>{t('layout.title', { title })}</title>
<meta name="description" content={t('layout.description')} />
</Head>
<header>
<h1>{t('layout.header')}</h1>
</header>
<main>{children}</main>
<footer>
<p>{t('layout.footer', { year: new Date().getFullYear() })}</p>
</footer>
</>
);
}
export default Layout;
SeejÀrel on teil tÔlkefailid, mis on tavaliselt salvestatud struktuuris `public/locales/[locale]/[namespace].json`. NÀiteks vÔib `public/locales/en/common.json` sisaldada jÀrgmist:
{
"layout": {
"title": "{{title}} | My App",
"description": "My Next.js App Description",
"header": "My App Header",
"footer": "© {{year}} My App. All rights reserved."
}
}
Ja `public/locales/fr/common.json` (prantsuse keele jaoks) vÔib sisaldada jÀrgmist:
{
"layout": {
"title": "{{title}} | Mon Application",
"description": "Description de mon application Next.js",
"header": "En-tĂȘte de mon application",
"footer": "© {{year}} Mon application. Tous droits réservés."
}
}
MÀrkus: See nÀide pakub i18n integratsioonile aluselist lÀhenemisviisi ja vajab tÀiendavat konfiguratsiooni (nt keeletuvastus, marsruutimise seadistamine). PÔhjaliku juhendamise saamiseks vaadake `next-i18next` dokumentatsiooni.
3. Responsivne disain ja layoutid
Responsivne disain on ĂŒlemaailmse publiku jaoks kriitilise tĂ€htsusega. Teie layout peab kohanema erinevate ekraanisuuruste ja seadmetega. Kasutage CSS raamistikke nagu Bootstrap, Tailwind CSS vĂ”i looge kohandatud meediapĂ€ringuid, et tagada jĂ€rjepidev ja kasutajasĂ”bralik kogemus kĂ”igis seadmetes.
4. LigipÀÀsetavuse kaalutlused
JÀrgige ligipÀÀsetavuse juhiseid (WCAG), et muuta oma rakendus puuetega inimestele kasutatavaks. See hÔlmab jÀrgmist:
- Semantiline HTML: Kasutage semantilisi HTML elemente (
<nav>
,<article>
,<aside>
), et oma sisu loogiliselt struktureerida. - Alternatiivne tekst piltidele: Esitage alati kirjeldavad `alt` atribuudid piltide jaoks.
- Klaviatuuriga navigeerimine: Veenduge, et teie rakenduses oleks vÔimalik navigeerida ainult klaviatuuri abil.
- VÀrvikontrastsus: SÀilitage piisav vÀrvikontrastsus teksti ja tausta vahel.
- ARIA atribuudid: Kasutage ARIA atribuute, et vajadusel ligipÀÀsetavust suurendada.
5. KuupÀeva ja kellaaja vormindamine
Erinevatel piirkondadel on erinevad kuupÀeva ja kellaaja vormingute konventsioonid. Veenduge, et kuupÀevad ja kellaajad kuvatakse Ôigesti, lÀhtudes kasutaja lokaadist. Teegid nagu `date-fns` vÔi JavaScripti sisseehitatud `Intl` API saavad seda kÀsitleda.
import { format } from 'date-fns';
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { i18n } = useTranslation();
const currentDate = new Date();
const formattedDate = format(currentDate, 'MMMM d, yyyy', { locale: i18n.language });
return <p>{formattedDate}</p>;
}
6. Valuuta vormindamine
Kuvage rahalisi vÀÀrtusi iga lokaadi jaoks Ôiges vormingus. API `Intl.NumberFormat` on valuuta vormindamise kÀsitlemisel vÀÀrtuslik.
function MyComponent() {
const { i18n } = useTranslation();
const price = 1234.56;
const formattedPrice = new Intl.NumberFormat(i18n.language, { // Use i18n.language for locale
style: 'currency',
currency: 'USD', // Or dynamically determine the currency based on user preferences
}).format(price);
return <p>{formattedPrice}</p>
}
7. Paremalt-vasakule (RTL) keeled
Kui teie rakendus peab toetama keeli nagu araabia vÔi heebrea (RTL keeled), kujundage oma layout selle majutamiseks. Kaaluge CSS omaduste kasutamist nagu `direction: rtl;` ja UI elementide positsioneerimise reguleerimist.
8. Sisu edastusvÔrgud (CDN) ja jÔudlus
Kasutage CDN-i, et teenindada oma rakenduse staatilisi varasid (pildid, CSS, JavaScript) serveritest, mis on geograafiliselt teie kasutajatele lÀhemal. See vÀhendab latentsust ja parandab rahvusvaheliste kasutajate jaoks lehe laadimisaega. Next.js-i sisseehitatud pildi optimeerimine ja CDN-i integratsioon vÔivad jÔudlust oluliselt parandada.
9. SEO optimeerimine globaalsetele turgudele
Otsingumootori optimeerimine (SEO) on ĂŒlioluline kasutajate meelitamiseks kogu maailmas. Kasutage jĂ€rgmisi tehnikaid:
- KeelepÔhised URL-id: Kasutage oma URL-ides keelekoode (nt `/en/`, `/fr/`, `/es/`), et nÀidata sisu keelt.
- hreflang sildid: Juurutage oma HTML-i jaotises `` hreflang silte. Need sildid ĂŒtlevad otsingumootoritele veebilehe keele ja piirkondliku sihtimise. See on oluline tagamaks, et teie sisu Ă”ige versioon kuvatakse otsingutulemustes.
- Meta kirjeldused ja pealkirjasildid: Optimeerige oma meta kirjeldused ja pealkirjasildid iga keele ja piirkonna jaoks.
- Sisu kvaliteet: Pakkuge kvaliteetset ja originaalset sisu, mis on teie sihtrĂŒhmale asjakohane.
- Veebisaidi kiirus: Optimeerige veebisaidi kiirust, kuna see on oluline jÀrjestusfaktor. Kasutage Next.js-i jÔudluse optimeerimisi.
NĂ€ide hreflang siltidest teie `Layout` komponendi jaotises `
`:
<Head>
<title>{t('layout.title', { title })}</title>
<meta name="description" content={t('layout.description')} />
<link rel="alternate" href="https://www.example.com/" hreflang="x-default" /> {
<link rel="alternate" href="https://www.example.com/en/" hreflang="en" />
<link rel="alternate" href="https://www.example.com/fr/" hreflang="fr" />
// More language variants
</Head>
TĂ€iustatud layout strateegiad
1. Koodi tĂŒkeldamine layoutidega
Next.js teostab automaatselt koodi tĂŒkeldamise, et parandada jĂ”udlust, kuid saate seda kĂ€itumist dĂŒnaamiliste importide abil tĂ€pselt hÀÀlestada, eriti oma layoutides. Suuremate komponentide dĂŒnaamilise importimise abil saate vĂ€hendada esialgset JavaScripti paketi suurust, mis toob kaasa kiirema esialgse laadimisaja.
import dynamic from 'next/dynamic';
const DynamicComponent = dynamic(() => import('../components/LargeComponent'));
function Layout({ children }) {
return (
<>
<header>...</header>
<main>
{children}
<DynamicComponent /> <!-- Dynamically loaded component -->
</main>
<footer>...</footer>
</>
);
}
NĂ€ites laaditakse `LargeComponent` dĂŒnaamiliselt. DĂŒnaamiline import viivitab selle komponendi allalaadimisega, kuni seda tegelikult vaja on.
2. Layoutid serveripoolse renderdamisega (SSR)
Next.js-i SSR vÔimalused vÔimaldavad teil sisu eelrenderdada serveris, parandades SEO-d ja esialgset laadimisaega. Saate juurutada SSR-i oma layoutides, et andmeid enne lehe kliendile edastamist hankida. See on eriti oluline sisu puhul, mis muutub sageli vÔi mida otsingumootorid peaksid indekseerima.
Kasutades lehel `getServerSideProps`, saate layoutile andmeid edastada:
// pages/posts/[id].js
import Layout from '../../components/Layout';
export async function getServerSideProps(context) {
const { id } = context.params;
const res = await fetch(`https://api.example.com/posts/${id}`);
const post = await res.json();
return {
props: {
post,
},
};
}
function PostPage({ post }) {
return (
<Layout title={post.title}>
<h1>{post.title}</h1>
<p>{post.content}</p>
</Layout>
);
}
export default PostPage;
Funktsioon `getServerSideProps` hangib postituse andmed. Andmed `post` edastatakse seejÀrel rekvisiidina layoutile.
3. Layoutid staatilise saidi genereerimisega (SSG)
Sisu jaoks, mis ei muutu sageli, pakub SSG olulisi jÔudluse eeliseid. See eelrenderdab lehed ehitamise ajal, genereerides staatilised HTML failid, mida teenindatakse otse kasutajale. SSG kasutamiseks juurutage oma lehe komponentides funktsioon `getStaticProps` ja andmeid saab layoutile edastada.
// pages/about.js
import Layout from '../components/Layout';
export async function getStaticProps() {
const aboutData = { title: 'About Us', content: 'Some information about our company.' };
return {
props: {
aboutData,
},
};
}
function AboutPage({ aboutData }) {
return (
<Layout title={aboutData.title}>
<h2>{aboutData.title}</h2>
<p>{aboutData.content}</p>
</Layout>
);
}
export default AboutPage;
Selles SSG nÀites hangib `getStaticProps` andmeid ehitamise ajal ja edastab need seejÀrel `AboutPage` lehele, mida seejÀrel renderdatakse, kasutades komponenti `Layout`.
4. Pesa paigutused
Keerukate rakenduste jaoks vÔib vaja minna pesa paigutusi. See tÀhendab, et paigutused on paigutuste sees. NÀiteks vÔib teil olla peamine rakenduse paigutus ja seejÀrel kasutada oma veebisaidi konkreetsete jaotiste jaoks erinevaid paigutusi. See vÔimaldab kasutajaliidese peenemat kontrolli.
// components/MainLayout.js
function MainLayout({ children }) {
return (
<>
<header>Main Header</header>
<main>{children}</main>
<footer>Main Footer</footer>
</>
);
}
export default MainLayout;
// components/SectionLayout.js
function SectionLayout({ children }) {
return (
<div className="section-wrapper">
<aside>Section Navigation</aside>
<div className="section-content">{children}</div>
</div>
);
}
export default SectionLayout;
// pages/section/[page].js
import MainLayout from '../../components/MainLayout';
import SectionLayout from '../../components/SectionLayout';
function SectionPage({ page }) {
return (
<MainLayout>
<SectionLayout>
<h1>Section Page: {page}</h1>
<p>Content for section page {page}.</p>
</SectionLayout>
</MainLayout>
);
}
export async function getServerSideProps(context) {
const { page } = context.query;
return {
props: {
page,
},
};
}
export default SectionPage;
Sel juhul on `SectionPage` pakitud nii `MainLayout` kui ka `SectionLayout` abil, et luua pesa paigutuse struktuur.
Parimad praktikad ja optimeerimise nÀpunÀited
1. Komponendi kompositsioon
Kasutage komponendi kompositsiooni. Jaotage oma paigutused ja UI elemendid vÀiksemateks, taaskasutatavateks komponentideks. See suurendab koodi loetavust ja hooldatavust.
2. JÔudluse jÀlgimine
JÀlgige pidevalt oma paigutuste ja rakenduse jÔudlust, kasutades selliseid tööriistu nagu Google Lighthouse vÔi WebPageTest. Need tööriistad aitavad teil tuvastada jÔudluse kitsaskohti ja optimeerimisvaldkondi.
3. VahemÀllu salvestamise strateegiad
Juurutage vahemÀllu salvestamise strateegiad, et vÀhendada serveri koormust ja parandada reageerimisaegu. Kaaluge sageli juurdepÀÀsetavate andmete vahemÀllu salvestamist, staatiliste varade jaoks brauseri vahemÀllu salvestamist ja sisu kasutajale lÀhemale vahemÀllu salvestamiseks sisu edastusvÔrgu (CDN) juurutamist.
4. Laisk laadimine
Kasutage piltide ja muude mittekriitiliste komponentide jaoks laisk laadimist. See lÀhenemisviis viivitab ressursside laadimisega, kuni neid vaja on, vÀhendades esialgset lehe laadimisaega.
5. VĂ€ltige liigseid ĂŒmberrenderdusi
Optimeerige oma komponente, et vĂ€ltida tarbetuid ĂŒmberrenderdusi. Komponentide ja funktsioonide memoiseerimiseks kasutage `React.memo`, `useMemo` ja `useCallback`. Kasutage loendite renderdamisel Ă”igesti rekvisiiti `key`, et aidata Reactil muudatusi tĂ”husalt tuvastada.
6. Testimine
Juurutage oma paigutuse komponentide pĂ”hjalik testimine, sealhulgas ĂŒhiku- ja integratsioonitestid, et tagada nende ootuspĂ€rane toimimine ja jĂ€rjepideva kĂ€itumise sĂ€ilitamine. Testige paigutusi erinevatel ekraanisuurustel ja lokaatides.
KokkuvÔte
Next.js Layoutid pakuvad vĂ”imsaid ja mitmekĂŒlgseid tööriistu erakordsete veebirakenduste ehitamiseks. Valdades selles juhendis kĂ€sitletud tehnikaid, saate luua hĂ€sti struktureeritud, hooldatavaid ja jĂ”udlusele orienteeritud UI-sid. Ărge unustage jĂ€rgida rahvusvahelistumise ja globaliseerumise parimaid praktikaid, et tagada, et teie rakendus resoneerib globaalse publikuga. Ăhendades Next.js-i jĂ”u lĂ€bimĂ”eldud lĂ€henemisega paigutustele, olete hĂ€sti varustatud kaasaegsete, skaleeritavate ja universaalselt juurdepÀÀsetavate veebikogemuste loomiseks.